package cn.iocoder.yudao.framework.websocket.core.enums;

/**
 * WebSocket 消息类型枚举
 *
 * @author 芋道源码
 */
public enum WebSocketMessageTypeEnum {

    // ======================= 心跳相关 =======================
    /**
     * 客户端发送的心跳检测消息
     */
    PING("ping"),
    /**
     * 服务端返回的心跳响应消息
     */
    PONG("pong"),

    // ======================= 连接相关 =======================
    /**
     * 连接初始化
     */
    INIT("init"),
    /**
     * 用户绑定
     */
    BIND_UID("bindUid"),

    // ======================= 在线状态 =======================
    /**
     * 在线状态通知
     */
    IS_ONLINE("isOnline"),
    /**
     * 离线通知
     */
    OFFLINE("offline"),

    // ======================= 消息相关 =======================
    /**
     * 简单消息
     */
    SIMPLE("simple"),
    /**
     * 群组消息
     */
    GROUP("group"),
    /**
     * 系统消息
     */
    SYSTEM("system"),

    // ======================= 消息状态 =======================
    /**
     * 消息已读
     */
    IS_READ("isRead"),
    /**
     * 全部已读
     */
    READ_ALL("readAll"),
    /**
     * 撤回消息
     */
    UNDO_MESSAGE("undoMessage"),
    /**
     * 清空消息
     */
    CLEAR_MESSAGE("clearMessage"),

    // ======================= 音视频通话 =======================
    /**
     * WebRTC 通话相关
     */
    WEBRTC("webrtc"),

    // ======================= 其他 =======================
    /**
     * @消息列表
     */
    AT_MSG_LIST("atMsgList"),
    /**
     * 移除用户
     */
    REMOVE_USER("removeUser");

    /**
     * 消息类型值
     */
    private final String type;

    WebSocketMessageTypeEnum(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    /**
     * 根据类型值获取枚举
     */
    public static WebSocketMessageTypeEnum getByType(String type) {
        for (WebSocketMessageTypeEnum messageType : values()) {
            if (messageType.getType().equals(type)) {
                return messageType;
            }
        }
        return null;
    }
}